"""
html 页面中还有一个概念 , frame.

frame 是 html 中的框架 , 是在同一个 html 中显示多个页面 .

frame 分为: frameset , frame , iframe 三种 .
    frameset 和普通的标签一样 , 不影响正常的定位 .
    frame 和 iframe 则需要切换之后再进行定位 .



frame 切换:
    driver.switch_to.frame(id/name/element)
    driver.switch_to.parent_frame()
    driver.switch_to.default_content()

    在嵌套的 frame 中,需要一层一层切换 .



示例为:
    菜鸟教程 , HTML教程 , HTML框架 , 使用 iframe 来显示目标链接页面 , 尝试一下

"""
from time import sleep

from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

from basic.s1_pytest_base import TestBase


class TestFrames(TestBase):
    url = 'https://www.runoob.com/try/try.php?filename=tryhtml_iframe_target'

    def test_oo1(self):
        """
        进入第一层 iframe
        定位官网网址链接 , 并点击
        此时第二层 iframe 中页面刷新成菜鸟教程官网 .
        定位第二层 iframe 中的 菜鸟工具 , 并点击
        此是会打开新的窗口 ,
        切换回原来的窗口 , 切换回来就可以直接定位最外层元素 .
        定位最外层的 点击运行 按钮 , 并点击 , 此时第一层 iframe 会刷新 .
        """
        self.driver.get(self.url)

        self.driver.switch_to.frame('iframeResult')
        self.driver.find_element(By.CSS_SELECTOR, '[target="iframe_a"]').click()

        self.driver.switch_to.frame('iframe_a')
        self.driver.find_element(By.CSS_SELECTOR, '[title="不止于工具"]').click()

        self.driver.switch_to.window(self.driver.window_handles[0])
        self.driver.find_element(By.CSS_SELECTOR, '#submitBTN').click()

    def test_oo2(self):
        """
        进入第一层 iframe
        定位官网网址链接 , 点击
        此时第二层 iframe 中页面刷新成菜鸟教程官网 .
        定位第二层 iframe 中的二维码按钮 .
        将鼠标移动到二维码按钮 .
        # 切换会上层 iframe
        # 再切换会上层 iframe
        直接切换回默认层 ( 最外层 html )
        定位 运行一下 , 并点击 , 此是第一层 iframe 会刷新 .
        """
        self.driver.get(self.url)

        self.driver.switch_to.frame('iframeResult')
        self.driver.find_element(By.CSS_SELECTOR, '[target="iframe_a"]').click()

        self.driver.switch_to.frame('iframe_a')
        ele = self.driver.find_element(By.CSS_SELECTOR, '.fa.fa-qrcode')

        action_chains = ActionChains(self.driver)
        action_chains.move_to_element(ele).perform()
        sleep(1)

        # self.driver.switch_to.parent_frame()
        # self.driver.switch_to.parent_frame()  # 两层父级才到最外层 html
        self.driver.switch_to.default_content()  # 直接切换到默认 , 也就是最外层 html

        self.driver.find_element(By.CSS_SELECTOR, '#submitBTN').click()
